svn迁移到gitlab并保留commit历史记录

您所在的位置:网站首页 git svn clone命令 svn迁移到gitlab并保留commit历史记录

svn迁移到gitlab并保留commit历史记录

2023-12-14 10:23| 来源: 网络整理| 查看: 265

转载于:https://blog.csdn.net/u010039418/article/details/86138101/ 2020博客地址汇总2019年博客汇总

 

背景

项目上使用的svn作为代码版本管理工具,由于资源整合,需要迁移到gitlab上,同时要保留历史提交记录。

迁移过程

1、获取svn提交用户名

因为在git上每个提交需要有用户的提交信息,如邮箱,因此我们得先获取到所有的用户名,然后生成如下对应的git格式,用于稍后的git clone上。

chenshiying = chenshiying Kobe = Kobe

 

在windows对应工程目录下打开cmd命令窗口,执行以下命令,

svn log > log.txt

 

执行后会在当前目录下生成所有历史提交记录,如下格式,

------------------------------------------------------------------------ r16223 | Kobe | 2017-08-18 15:22:04 +0800 (周五, 18 8月 2017) | 1 line ------------------------------------------------------------------------ r16222 | Kobe | 2017-08-18 15:21:49 +0800 (周五, 18 8月 2017) | 1 line ------------------------------------------------------------------------ r16221 | Jordan | 2017-08-18 15:09:03 +0800 (周五, 18 8月 2017) | 1 line

 

这时候可以把该文件放到linux环境下,提取并编辑为上述格式的用户对应文件。可通过如下命令提取所有用户,

grep "^r[0-9]" log.txt | awk -F "|" '{print $2}' | sort -n | uniq > users.txt

 

然后稍加修饰,生成用户映射文件,

while read line;do echo "$line = $line " >> user;done < users.txt

 

2、准备环境

我们通过linux环境将svn代码迁移到git上,因此linux环境上要先安装git-svn组件,

yum install -y git-svn

 

3、拉取svn代码到本地

通过git svn clone命令将svn库代码拉取到本地,

git svn clone svn_address --no-metadata --authors-file=user local_dir --username=chenshiying

 

其中,svn_address 即为待迁移svn的工程地址;–no-metadata 防止git拉取无用的SVN附加信息;–authors-file 指定用户映射文件,即第一步里生成的文件;local_dir 为本地存放该svn工程目录,若不存在,git会自行创建;–username 即为使用指定用户拉取代码,因此该用户必须要有拉取代码的权限。

执行命令后,输入密码,对应的svn工程就会被拉取到本地。

4、获取gitlab地址

确定svn工程迁入后存放位置,例如,

[email protected]:groupname/projectname.git

 

最好现在gitlab上创建好projectname,设置好相关权限。虽然git push的时候会自动创建,但是设置都是默认的,可能不符合你要求。

5、添加远程git库

使用git remote命令添加远程服务器,也就是git代码存放路径。

git remote add origin [email protected]:groupname/projectname.git

 

其中,origin为远程服务器名字,你也可以使用其他名字。

6、提交代码到git库

将本地的master分支推送到我们刚才关联的远程服务器origin,同时指定origin为默认主机,后续push就不需要指定远程服务器了。

git push -u origin master

 

这样在gitlab上就能看到工程代码,以及svn转换后的commit历史提交记录。

注意事项

1、git svn clone太慢

如果svn的提交记录太多,可以拉取最后几个版本即可,毕竟太旧的提交记录也没什么意义。使用以下命令拉取svn特定修改版本代码,

git svn clone -r31137:HEAD svn_address --no-metadata --authors-file=user local_dir --username=chenshiying

 

以上命令拉取第5000次修改到最新代码修改的记录,用户可以根据实际需要确定起始拉取的版本。

2、svn 提取的用户中有(no author)

由于各种原因,svn导出的日志中,提交人出现no author的情况,在git svn clone执行时总是报错。由于没有svn服务器权限,因此只能在users.txt的用户映射文件中添加以下映射,

(no author) = no author

 

3、问题:

如果你的地址是https,那么在命令行中会提示证书验证问题,如何忽略验证呢?命令执行:git config --global http.sslVerify false如果你执行过程失败,多次执行了init 操作,它会提示错误 Using existing [svn-remote "svn"] svn-remote.svn.fetch already set to track

 

此时应该: (1) 自己创建的目录下多了一个空白的文件夹,删掉它 (2) ~ 不太记得了,貌似1就行了

 

4、会有一个确认操作,我曾卡在这里很久,这里不是输入 Y/N

(R)eject, accept (t)emporarily or accept (p)ermanently? Y

 

暂时接受还是永久接受; 所以请回复 t/p

 

F:\9Git140\gitlabUser.txt



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3